<?php

class WfEmpresa {
//<editor-fold defaultstate="collapsed" desc="Constantes">
  const NOMBRE_ENTIDAD = "WfEmpresa";
  const NOMBRE_ENTIDAD_LOGO = "WfEmpresaLogo";
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Campos">
  private $_id;
  private $_razonSocial;
  private $_nombre;
  private $_rut;
  private $_dv;
  private $_giro;
  private $_direccion;
  private $_url;
  private $_fechaInicio;
  private $_fechaTermino;
  private $_fechaCreacion;
  private $_activo;
  private $_existe;
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Propiedades">
  public function getId() { return $this->_id; }
  public function setId($value) { $this->_id = $value; }

  public function getRazonSocial() { return $this->_razonSocial; }
  public function setRazonSocial($value) { $this->_razonSocial = $value; }

  public function getNombre() { return $this->_nombre; }
  public function setNombre($value) { $this->_nombre = $value; }

  public function getRut() { return $this->_rut; }
  public function setRut($value) { $this->_rut = $value; }

  public function getDv() { return $this->_dv; }
  public function setDv($value) { $this->_dv = $value; }

  public function getGiro() { return $this->_giro; }
  public function setGiro($value) { $this->_giro = $value; }

  public function getDireccion() { return $this->_direccion; }
  public function setDireccion($value) { $this->_direccion = $value; }

  public function getUrl() { return $this->_url; }
  public function setUrl($value) { $this->_url = $value; }

  public function getFechaInicio() { return $this->_fechaInicio; }
  public function setFechaInicio($value) { $this->_fechaInicio = $value; }

  public function getFechaTermino() { return $this->_fechaTermino; }
  public function setFechaTermino($value) { $this->_fechaTermino = $value; }

  public function getFechaCreacion() { return $this->_fechaCreacion; }
  public function setFechaCreacion($value) { $this->_fechaCreacion = $value; }

  public function getActivo() { return $this->_activo; }
  public function setActivo($value) { $this->_activo = $value; }

  public function getExiste() { return $this->_existe; }
  public function setExiste($value) { $this->_existe = $value; }
//</editor-fold>
  
//<editor-fold defaultstate="collapsed" desc="Metodos Publicos">
  /**
   * constructor
   * @author VSR, 16/05/2012
   */
  public function __construct() {
    try {
        $this->_id = -1;
        $this->_razonSocial = "";
        $this->_nombre = "";
        $this->_rut = "";
        $this->_dv = "";
        $this->_giro = "";
        $this->_direccion = "";
        $this->_url = "";
        $this->_fechaInicio = "";
        $this->_fechaTermino = "";
        $this->_fechaCreacion = "";
        $this->_activo = 0;
        $this->_existe = 0;
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * obtiene registro por su id
   * @author VSR, 16/05/2012
   */
  public function obtenerPorId($id = -1) {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_ObtenerPorId({id});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $id, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      if ($totalRegistros > 0) {
        $row = $arr[0];
        $this->_id = ( is_null($row["Id"]) ) ? -1 : $row["Id"];
        $this->_razonSocial = ( is_null($row["RazonSocial"]) ) ? "" : $row["RazonSocial"];
        $this->_nombre = ( is_null($row["Nombre"]) ) ? "" : $row["Nombre"];
        $this->_rut = ( is_null($row["Rut"]) ) ? "" : $row["Rut"];
        $this->_dv = ( is_null($row["Dv"]) ) ? "" : $row["Dv"];
        $this->_giro = ( is_null($row["Giro"]) ) ? "" : $row["Giro"];
        $this->_direccion = ( is_null($row["Direccion"]) ) ? "" : $row["Direccion"];
        $this->_url = ( is_null($row["Url"]) ) ? "" : $row["Url"];
        $this->_fechaInicio = ( is_null($row["FechaInicio"]) ) ? "" : $row["FechaInicio"];
        $this->_fechaTermino = ( is_null($row["FechaTermino"]) ) ? "" : $row["FechaTermino"];
        $this->_fechaCreacion = ( is_null($row["FechaCreacion"]) ) ? "" : $row["FechaCreacion"];
        $this->_activo = ( is_null($row["Activo"]) ) ? 0 : $row["Activo"];
        $this->_existe = ($this->_id == -1) ? 0 : 1;
      } else {
        $this->_id = -1;
        $this->_razonSocial = "";
        $this->_nombre = "";
        $this->_rut = "";
        $this->_dv = "";
        $this->_giro = "";
        $this->_direccion = "";
        $this->_url = "";
        $this->_fechaInicio = "";
        $this->_fechaTermino = "";
        $this->_fechaCreacion = "";
        $this->_activo = 0;
        $this->_existe = 0;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }
  

  /**
   * crea o actualiza un registro
   * @author VSR, 16/05/2012
   */
  public function grabar() {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_Grabar({id},'{razonSocial}','{nombre}','{rut}','{dv}','{giro}','{direccion}','{url}','{fechaInicio}','{fechaTermino}','{fechaCreacion}',{activo});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $this->_id, $sp);
      $sp = str_replace("{razonSocial}", $this->_razonSocial, $sp);
      $sp = str_replace("{nombre}", $this->_nombre, $sp);
      $sp = str_replace("{rut}", $this->_rut, $sp);
      $sp = str_replace("{dv}", $this->_dv, $sp);
      $sp = str_replace("{giro}", $this->_giro, $sp);
      $sp = str_replace("{direccion}", $this->_direccion, $sp);
      $sp = str_replace("{url}", $this->_url, $sp);
      $sp = str_replace("{fechaInicio}", $this->_fechaInicio, $sp);
      $sp = str_replace("{fechaTermino}", $this->_fechaTermino, $sp);
      $sp = str_replace("{fechaCreacion}", $this->_fechaCreacion, $sp);
      $sp = str_replace("{activo}", $this->_activo, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      if ($totalRegistros > 0) {
        $row = $arr[0];
        $this->_id = $row["Id"];
        $this->_existe = 1;
      } else {
        $this->_id = -1;
        $this->_existe = 0;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * elimina un registro
   * @author VSR, 16/05/2012
   */
  public function eliminar() {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_Eliminar({id});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $this->_id, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      $this->_id = -1;
      $this->_existe = 0;
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * destructor
   * @author VSR, 16/05/2012
   */
  public function  __destruct() {
   // destruye el objeto
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Compartidos">
  /**
   * obtiene listado de empresas
   * @param <type> $idUsuario
   * @param <type> $filtroRut
   * @param <type> $filtroRazonSocial
   * @param <type> $filtroNombre
   * @return string
   * @author VSR, 11/11/2011
   */
  public static function obtenerListadoConFiltro($idUsuario, $filtroRut, $filtroRazonSocial, $filtroNombre) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_ObtenerListadoConFiltro({idUsuario},'{filtroRut}','{filtroRazonSocial}','{filtroNombre}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idUsuario}", $idUsuario, $sp);
      $sp = str_replace("{filtroRut}", $filtroRut, $sp);
      $sp = str_replace("{filtroRazonSocial}", $filtroRazonSocial, $sp);
      $sp = str_replace("{filtroNombre}", $filtroNombre, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);

    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * obtiene el detalle de la empresa
   * @param <type> $idEmpresa
   * @return string
   * @author VSR, 11/11/2011
   */
  public static function obtenerDetalle($idEmpresa, $entidadLogo) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_ObtenerDetalle({idEmpresa},'{entidadLogo}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idEmpresa}", $idEmpresa, $sp);
      $sp = str_replace("{entidadLogo}", $entidadLogo, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp, Bd::MULTI_QUERY);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * graba o actualiza los datos de la empresa
   * @param <type> $idEmpresa
   * @param <type> $nombre
   * @param <type> $activo
   * @return string
   * @author VSR, 11/11/2011 
   */
  public static function grabarDatos($idEmpresa, $rut, $dv, $razonSocial, $nombre, $giro, $url, $direccion, $fechaInicio, $fechaTermino,
                                    $activo, $listadoIdUsuarios, $listadoIdPlantillas) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_GrabarDatos({idEmpresa},'{rut}','{dv}','{razonSocial}','{nombre}','{giro}','{url}','{direccion}','{fechaInicio}','{fechaTermino}',{activo}, '{listadoIdUsuarios}', '{listadoIdPlantillas}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idEmpresa}", $idEmpresa, $sp);
      $sp = str_replace("{rut}", $rut, $sp);
      $sp = str_replace("{dv}", $dv, $sp);
      $sp = str_replace("{razonSocial}", $razonSocial, $sp);
      $sp = str_replace("{nombre}", $nombre, $sp);
      $sp = str_replace("{giro}", $giro, $sp);
      $sp = str_replace("{url}", $url, $sp);
      $sp = str_replace("{direccion}", $direccion, $sp);
      $sp = str_replace("{fechaInicio}", $fechaInicio, $sp);
      $sp = str_replace("{fechaTermino}", $fechaTermino, $sp);
      $sp = str_replace("{activo}", $activo, $sp);
      $sp = str_replace("{listadoIdUsuarios}", $listadoIdUsuarios, $sp);
      $sp = str_replace("{listadoIdPlantillas}", $listadoIdPlantillas, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * elimina la empresa
   * @param <type> $idEmpresa
   * @return <type>
   */
  public static function eliminarDatos($idEmpresa) {
    $retorno = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_EliminarDatos({idEmpresa});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idEmpresa}", $idEmpresa, $sp);

      //ejecuta procedimiento
      $retorno = Bd::exec($sp, Bd::SCALAR, Bd::ORIGEN_DATOS_DEFAULT ,"Status");
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }

  /**
   * determina si un valor ya existe en base de datos para la empresa seleccionada
   * @param <type> $idEmpresa
   * @param <type> $valor
   * @param <type> $campoARevisar
   * @return string
   * @author VSR, 13/11/2011
   */
  public static function verificarDuplicidad($idEmpresa, $valor, $campoARevisar) {
    $estaDuplicado = "0";

    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_VerificarDuplicidad$campoARevisar({idEmpresa}, '{valor}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idEmpresa}", $idEmpresa, $sp);
      $sp = str_replace("{valor}", $valor, $sp);

      //ejecuta procedimiento
      $estaDuplicado = Bd::exec($sp, Bd::SCALAR);
    } catch (Exception $e) {
      $estaDuplicado = "0";
    }
    return $estaDuplicado;
  }

  /**
   * obtiene id de la empresa por la url asignada
   * @param <type> $url
   * @return string
   * @author VSR, 02/03/2012
   */
  public static function obtenerIdPorUrl($url) {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfEmpresa_ObtenerIdPorUrl('{url}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{url}", $url, $sp);

      //ejecuta procedimiento
      $retorno = Bd::exec($sp, Bd::SCALAR);
    } catch (Exception $e) {
      $retorno = "-1";
    }
    return $retorno;
  }


//</editor-fold>
}
?>

